package com;

/**
 * 抽象类的基本概念：抽象类可以理解为类的抽象层次，思考很多对象就可以抽象出一个类，很多类就可以抽象出抽象类
 * 1.很多具有相同特征和行为的对象可以抽象为一个类，很多具有相同特征和行为的类可以抽象为一个抽象类。
 * 2.使用abstract关键字声明的类为抽象类。
 *      例如：男人 类 ，女人类 可以抽象出人的抽象类
 *1.抽象类可以没有抽象方法，有抽象方法的类必须是抽象类
 *2.非抽象类继承抽象类必须实现所有的抽象方法
 *3.抽象类可以继承抽象类，可以不实现父类的抽象方法
 *4.抽象类可以有方法实现和属性
 *5.抽象类不能被实例化
 *6.抽象类不能声明final
 *7.抽象类可以有构造方法
 *
 */
public class Abstract {
    public static void main(String[] args) {
        Man man=new Man();
        man.move();
        man.eat();
        Woman woman=new Woman();
        woman.move();
        woman.eat();
    }

}
abstract class Animal{
    public abstract void move();//方法的声明，抽象方法只有声明，没有实现
}
abstract class Person extends Animal{
    public abstract void eat();
}
//继承抽象类的具体类必须实现所有的抽象方法
class Man extends Person{

    @Override
    public void move() {
        System.out.println("======我是女人，我能move============");
    }

    @Override
    public void eat() {
        System.out.println("我是男人我爱吃肉");
    }
}


class Woman extends Person{

    @Override
    public void move() {
        System.out.println("====我是woman,我能move==========");
    }

    @Override
    public void eat() {
        System.out.println("我是女人我爱吃醋");
    }
}
